package com.fulin.sycnLife;

import java.util.concurrent.CountDownLatch;

/**
 * CountDownLatch 实现等待其他线程执行完毕之后，执行某种逻辑
 * @author fulin16
 *
 */
public class CountDownLatchTest {
	
	/**
	 * CountDownLatch的构造函数接收一个int类型的参数作为计数器，如果你想等待N个点完成，这里就传入N
	 * 
	 * 当我们调用CountDownLatch的countDown方法的时候，N就会减一，CountDownLatch的await方法会阻塞
	 * 当前线程，知道N 变成0.由于countDown方法可以用在任何地方，所以这里的N个点可以是N个线程也可以
	 * 是1个线程里的N个执行步骤
	 */
	static CountDownLatch c = new CountDownLatch(2);
	
	public static void main(String[] args) throws InterruptedException {
		new Thread(new Runnable(){

			@Override
			public void run() {
				System.out.println(1);
				c.countDown();
				System.out.println(2);
				c.countDown();
			}
			
		}).start();
		c.await();
		System.out.println("3");
	}
}
